package com.th.supcom.pds.impl.manager;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.th.supcom.pds.domain.pojo.Office;
import com.th.supcom.pds.domain.pojo.PdsPhamDocuDetail;
import com.th.supcom.pds.domain.pojo.PdsPrescDetail;
import com.th.supcom.pds.domain.pojo.PdsPrescDetailCombine;
import com.th.supcom.pds.domain.pojo.PdsPrescDetailPham;
import com.th.supcom.pds.domain.vo.PdsPrescDetailAndPrescVo;
import com.th.supcom.pds.domain.vo.PdsPrescDetailVO;
import com.th.supcom.pds.domain.vo.PdsPrescParametersVO;

/**
 * PdsPrescDetail 管理接口.
 * 
 * 处方明细.
 */
public interface PdsPrescDetailManager
{
    /**
     * 通过处方号查询处方明细 以及 处方主记录的一些信息
     * 
     * @return
     */
    public List <PdsPrescDetailAndPrescVo> getPrescDetailByPrescNo (PdsPrescDetailAndPrescVo pdsPrescDetailAndPrescVo);

    public List <PdsPrescDetailVO> queryPrescDetail (PdsPrescParametersVO pdsPrescParametersVO);

    /**
     * 通过处方号查询处方以及处方明细记录，用于门诊退药
     * 
     * @param pdsPrescDetailAndPrescVo
     * @return
     */
    public List <PdsPrescDetailAndPrescVo> getPrescDetailForReturn (PdsPrescDetailAndPrescVo pdsPrescDetailAndPrescVo);

    /**
     * 通过处方号查询处方以及处方明细记录，用于门诊退费申请
     * 
     * @param pdsPrescDetailAndPrescVo
     * @return
     */
    public List <PdsPrescDetailAndPrescVo> getPrescDetailForRefund (PdsPrescDetailAndPrescVo pdsPrescDetailAndPrescVo);

    /**
     * 通过处方号查询处方明细 以及 处方主记录的一些信息
     * 
     * @return
     */
    public List <PdsPrescDetailAndPrescVo> findPrescDetailByPrescNo (PdsPrescDetailAndPrescVo pdsPrescDetailAndPrescVo);

    /**
     * 通过主键ID查询表记录.
     * 
     * @param id 主键ID
     * @return 返回PdsPrescDetail
     */
    public PdsPrescDetail getPdsPrescDetailByID (String id);

    /**
     * 获得当前表的序列号.
     * 
     * @return Long 当前序列号.
     */
    public Long getPdsPrescDetailSeq ();

    /**
     * 通过传输对象对应值查询表记录.
     * 
     * @param pdsPrescDetail 传输对象.
     * @return PdsPrescDetail 结果对象.
     */
    public List <PdsPrescDetail> findPdsPrescDetailListByExample (PdsPrescDetail pdsPrescDetail);

    /**
     * 通过传输对象对应值查询表记录.
     * 
     * @param pdsPrescDetailCombine 传输对象.
     * @return PdsPrescDetailCombine 结果对象.
     */
    public List <PdsPrescDetailCombine> findCombinePdsPrescDetailListByExample (PdsPrescDetailCombine pdsPrescDetailCombine);

    /**
     * 通过传输对象对应值查询表记录条数.
     * 
     * @param pdsPrescDetail 传输对象.
     * @return 条数.
     */
    public int findPdsPrescDetailCountByExample (PdsPrescDetail pdsPrescDetail);

    /**
     * 通过传输对象对应值查询表记录条数.
     * 
     * @param pdsPrescDetailCombine 传输对象.
     * @return 条数.
     */
    public int findCombinePdsPrescDetailCountByExample (PdsPrescDetailCombine pdsPrescDetailCombine);

    /**
     * 通过传输对象对应值查询表记录.
     * 
     * @param params Map入参对象.
     * @return PdsPrescDetail 结果对象集.
     */
    public List <PdsPrescDetail> findPdsPrescDetailListByMap (Map <String, Object> params);

    /**
     * 通过传入消费凭证等值查询表记录.
     * 
     * @param params Map入参对象.
     * @return CpoeInOrder 结果对象集.
     */
    public List <PdsPrescDetailCombine> findCombinePdsPrescDetailListByRcptNo (Map <String, Object> map);

    /**
     * 通过传输对象对应值查询表记录.
     * 
     * @param params Map入参对象.
     * @return PdsPrescDetailCombine 结果对象集.
     */
    public List <PdsPrescDetailCombine> findCombinePdsPrescDetailListByMap (Map <String, Object> params);

    /**
     * 通过员工Id查找员工分拣数
     * 
     * @param params
     * @return add by Zli
     */
    public Integer findPdsSortDrugCountByMap (Map <String, Object> params);

    /**
     * 通过传输对象对应值查询表记录并且进行分页.
     * 
     * @param params Map入参对象.
     * @param offset 起始页.
     * @param limit 结束页.
     * @return PdsPrescDetail 结果对象集.
     */
    public List <PdsPrescDetail> findPdsPrescDetailListWithPageByMap (Map <String, Object> params, Integer offset, Integer limit);

    /**
     * 通过传输对象对应值查询表记录并且进行分页.
     * 
     * @param params Map入参对象.
     * @param offset 起始页.
     * @param limit 结束页.
     * @return PdsPrescDetailCombine 结果对象集.
     */
    public List <PdsPrescDetailCombine> findCombinePdsPrescDetailListWithPageByMap (Map <String, Object> params, Integer offset, Integer limit);

    /**
     * 通过传输对象对应值查询表记录并且进行分页统计.
     * 
     * @param params Map入参对象.
     * @return Integer 查询结果总条数.
     */
    public Integer findPdsPrescDetailCountByMap (Map <String, Object> params);

    /**
     * 通过传输对象对应值查询表记录并且进行分页统计.
     * 
     * @param params Map入参对象.
     * @return Integer 查询结果总条数.
     */
    public Integer findCombinePdsPrescDetailCountByMap (Map <String, Object> params);

    /**
     * 通过主键ID更新表记录.
     * 
     * @param pdsPrescDetail 要更新的传输对象
     * @return 返回更新条数
     */
    public int modifyPdsPrescDetail (PdsPrescDetail pdsPrescDetail);

    /**
     * 通过主键ID更新表记录.
     * 
     * @param pdsPrescDetail 要更新的传输对象
     * @return 返回更新条数
     */
    public int modifyPdsPrescDetailByExample (PdsPrescDetail pdsPrescDetail);

    /**
     * 通过VO对象插入记录.
     * 
     * @param pdsPrescDetail 要插入的传输对象
     */
    public void addPdsPrescDetail (PdsPrescDetail pdsPrescDetail);

    /**
     * 通过主键ID删除表记录.
     * 
     * @param id 要删除的表的主键ID
     * @return 删除条数
     */
    public int removePdsPrescDetailByID (Long id);

    /**
     * 通过传入的Map参数删除表记录.
     * 
     * @param params 带条件的传入参数.
     * @return 删除条数.
     */
    public int removePdsPrescDetailByMap (Map <String, Object> params);

    /**
     * 通过处方明细对象更新发药人，发药时间和发药标志.
     * 
     * @param pdsPrescDetail 更新的传输对象.
     * @return 更新条数.
     */
    public int modifyPdsPrescDetailStatusByExample (PdsPrescDetail pdsPrescDetail);

    /**
     * 通过传输对象列表对应值查询表记录.
     * 
     * @param pdsPrescDetailCombines
     * @return
     */
    public List <PdsPrescDetailCombine> findCombinePdsPrescDetailListByList (List <PdsPrescDetailCombine> pdsPrescDetailCombines);

    /**
     * 通过处方明细对象批量更新发药人，发药时间和发药标志.
     * 
     * @param List pdsPrescDetailCombines 更新的传输对象.
     * @return 更新条数.
     */
    public int modifyPdsPrescDetailList (List <PdsPrescDetailCombine> pdsPrescDetailCombines);

    /**
     * 批量更新处方信息，用于门诊退药
     * 
     * @param pdsPrescDetail
     * @return
     */
    public int modiPresDetaForReturnDrug (List <PdsPrescDetail> pdsPrescDetail);

    /**
     * 根据药品的编码和执行科室名称查询批次号
     * 
     * @param pdsPrescDetailCombine
     * @return List
     */
    public List <PdsPrescDetailCombine> findPhamBatchByExample (PdsPrescDetailCombine pdsPrescDetailCombine);

    /**
     * 查出药房的所有执行科室
     * 
     * @return add by Zli
     */
    public List <Office> findExecutiveOffice ();

    /**
     * 根据处方号或者消费凭证号查询符合条件的所有处方详情信息，并且附带处方主记录信息
     * 
     * @param params
     * @return List
     */
    public List <PdsPrescDetailAndPrescVo> findPrescDetailByPrescAndRcpt (Map <String, Object> params);

    /**
     * 通过处方号，收方日期查询处方明细 以及 处方主记录的一些信息
     * 
     * @return List
     */
    public List <PdsPrescDetailAndPrescVo> findPrescDetailForRecipefee (PdsPrescDetailAndPrescVo pdsPrescDetailAndPrescVo);

    /**
     * 通过处方号，收方日期查询处方明细 以及 处方主记录的一些信息
     * 
     * @return List
     */
    public List <PdsPrescDetailAndPrescVo> findPrescDetailForPrint (PdsPrescDetailAndPrescVo pdsPrescDetailAndPrescVo);

    /**
     * 根据药品的编码和执行科室名称查询库存
     * 
     * @param pdsPrescDetailCombine
     * @return List
     */
    public Integer findDrugStockByExample (PdsPrescDetailCombine pdsPrescDetailCombine);

    /**
     * 根据药品的编码 查询批次管理标志
     * 
     * @param pdsPrescDetailCombine
     * @return String
     */
    public String findDrugBatchFlagByCode (PdsPrescDetailCombine pdsPrescDetailCombine);

    /**
     * 查出药房的执行科室
     * 
     * @return add by Zli
     */
    public List <Office> findExecutiveOffice (PdsPrescDetailCombine pdsPrescDetailCombine);

    /** 公司版权信息. */
    public static final String copyright = "Copyright 2014, TH Supcom Corporation";

    /** 提交路径. */
    public static final String SCC_BRANCH = "$URL$";

    /** 提交日期. */
    public static final String SCC_LAST_MODIFICATION_DATE = "$Date$";

    /** 最终修改人员. */
    public static final String SCC_LAST_MODIFIER_NAME = "$Author$";

    /** 最终版本号. */
    public static final String SCC_REVISION = "$Revision$";

    /**
     * 根据处方明细获取换算系数
     * 
     * @param params
     * @return List
     */
    public List <PdsPhamDocuDetail> findPhamDocuDetailByList (List <PdsPrescDetailCombine> pdsPrescDetailCombines);

    /**
     * /** 更新处方明细库存单据号
     * 
     * @param pdsPrescDetailCombines
     * @return
     */
    public int modifyPdsPrescDetailExNoList (List <PdsPrescDetailCombine> pdsPrescDetailCombines);

    /**
     * 根据处方明细查询处方药品信息
     * 
     * @param pdsPrescDetailCombines
     * @return
     */
    public List <PdsPrescDetailPham> findPrescDetailPhamByList (List <PdsPrescDetailCombine> pdsPrescDetailCombines);

    /**
     * 更新处方窗口
     * 
     * @param pdsPrescDetailCombines
     * @return
     */
    public int modifyPdsPrescDetailWindowByList (List <PdsPrescDetailCombine> pdsPrescDetailCombines);

    /**
     * 通过主键ID更新表记录，字段有值才更新.
     * 
     * @param pdsPrescDetail 更新的传输对象.
     * @return 更新条数.
     */
    public int modifyChargeIndicator (List <PdsPrescDetail> pdsPrescDetail);

    /**
     * 通过给患者ID查询处方号
     * 
     * @param patientId 患者ID
     * @return 处方号的list
     */
    public List <String> findPrescNoByPatientId (String patientId, Date enterTime);

}
